
import * as cc from 'cc';
const { ccclass, property, menu } = cc._decorator;

/**
 * @classdesc  游戏主内容节点自适应所有分辨率的脚本
 *
 * 用法：
 *      1. 将本组件挂载在节点上即可
 *
 * 适配原理：
 *      1. 将游戏主内容节点的宽高调整为画布的大小，以进行Size适配
 *
 * 注意：
 *      1. 挂载这个脚本的节点不能加入Widget组件，不然这个适配是没有效果的
 *      2. 目前只支持 SHOW_ALL 模式下的背景缩放适配，不支持其他模式的背景缩放
 *
 *  @example
    ```
    // e.g.
    // 代码中设置 SHOW_ALL 模式的参考代码
    cc.view.setDesignResolutionSize(720, 1280, cc.ResolutionPolicy.SHOW_ALL);

    // 或者 Canvas 组件中，同时勾选 Fit Width 和 Fit Height 
    ```
 */
@ccclass
@menu("屏幕适配组件/ContentAdapter")
export default class ContentAdapter extends cc.Component {
    onLoad() {
        // if (CC_DEBUG) {
        //     Log.log("调整前");
        //     Log.log(`屏幕分辨率: ${screen.windowSize.width} x ${screen.windowSize.height}`);
        //     Log.log(`视图窗口可见区域分辨率: ${cc.view.getVisibleSize().width} x ${cc.view.getVisibleSize().height}`);
        //     Log.log(`视图中边框尺寸: ${cc.view.getFrameSize().width} x ${cc.view.getFrameSize().height}`);
        //     Log.log(`设备或浏览器像素比例: ${cc.view.getDevicePixelRatio()}`);
        //     Log.log(`节点宽高: ${uiTrans.width} x ${uiTrans.height}`);
        // }

        let uiTrans = this.node.getComponent(cc.UITransform);
        // 1. 先找到 SHOW_ALL 模式适配之后，本节点的实际宽高以及初始缩放值
        let srcScaleForShowAll = Math.min(cc.screen.windowSize.width / uiTrans.width, cc.screen.windowSize.height / uiTrans.height);
        let realWidth = uiTrans.width * srcScaleForShowAll;
        let realHeight = uiTrans.height * srcScaleForShowAll;
  
        // 2. 基于第一步的数据，再做节点宽高适配
        uiTrans.width = uiTrans.width * (cc.screen.windowSize.width / realWidth);
        uiTrans.height = uiTrans.height * (cc.screen.windowSize.height / realHeight);
        // 3.根据宽高比,适配留海屏, 横屏不处理
        if (uiTrans.width < uiTrans.height && (uiTrans.width / uiTrans.height) < 0.5) {
            let heightOffset = 80
            uiTrans.height -= heightOffset;
            this.node.setPosition(cc.v3(this.node.position.x, this.node.position.y - heightOffset / 2, this.node.position.z));
        }
        // // 3. 因为本节点的宽高发生了改变，所以要手动更新剩下子节点的宽高
        // this._updateAllChildNodeWidget(uiTrans);

        // if (CC_DEBUG) {
        //     Log.log(`节点在SHOW_ALL模式下展示的宽高: ${realWidth} x ${realHeight}`);
        //     Log.log(`节点在SHOW_ALL模式下展示的缩放: ${srcScaleForShowAll}`);
        //     Log.log(
        //         `节点在SHOW_ALL模式下做全屏处理后的实际宽高（${screen.windowSize.width}x${
        //             screen.windowSize.height
        //         }）等价于于原节点的宽高(${uiTrans.width}x${uiTrans.height})`
        //     );
        // }
    }
    onEnable() {
        // 1. 先找到 SHOW_ALL 模式适配之后，本节点的实际宽高以及初始缩放值
        // let srcScaleForShowAll = Math.min(screen.windowSize.width / uiTrans.width, screen.windowSize.height / uiTrans.height);
        // let realWidth = uiTrans.width * srcScaleForShowAll;
        // let realHeight = uiTrans.height * srcScaleForShowAll;

        // 2. 基于第一步的数据，再做节点宽高适配
        // uiTrans.width = uiTrans.width * (screen.windowSize.width / realWidth);
        // uiTrans.height = uiTrans.height * (screen.windowSize.height / realHeight);
    }
}
